package com.seng.resourcetycoon.gui.util;

import java.util.*;

public class TowerNamingHelper {
    private static final List<String> TOWER_NAMES = initializeTowerNames();
    private static final Set<String> USED_TOWER_NAMES = new HashSet<>();
    private static final Random RANDOM_GENERATOR = new Random();

    private static List<String> initializeTowerNames() {
        List<String> names = new ArrayList<>();
        names.add("Crown Spire");
        names.add("Azure Heights");
        names.add("Iron Bastion");
        names.add("Silver Beacon");
        names.add("Emerald Bastion");
        names.add("Ruby Archway");
        names.add("Golden Summit");
        names.add("Amethyst Watchtower");
        names.add("Ivory Tower");
        names.add("Granite Citadel");
        names.add("Jade Fortress");
        names.add("Copper Monolith");
        names.add("Lapis Lazuli Tower");
        names.add("Steel Summit");
        names.add("Bronze Beacon");
        names.add("Onyx Obelisk");
        names.add("Pewter Pinnacle");
        names.add("Azure Skyscraper");
        names.add("Malachite Minaret");
        names.add("Iron Citadel");
        names.add("Platinum Pyramid");
        names.add("Brass Belfry");
        names.add("Garnet Gazebo");
        names.add("Turquoise Tower");
        names.add("Lead Lookout");
        names.add("Zinc Ziggurat");
        names.add("Agate Archway");
        names.add("Nickel Nook");
        names.add("Topaz Tower");
        names.add("Bronze Bulwark");
        names.add("Mica Mansion");
        names.add("Quartz Quay");
        names.add("Cobalt Colossus");
        names.add("Flint Fortress");
        names.add("Aluminum Acropolis");
        names.add("Rhodium Rookery");
        names.add("Fluorite Fort");
        names.add("Ironwood Watch");
        names.add("Chromium Citadel");
        names.add("Emerald Enclave");
        names.add("Copper Crown");
        names.add("Titanium Terrace");
        names.add("Pewter Palace");
        names.add("Lead Lighthouse");
        names.add("Silver Staircase");
        names.add("Nickel Nest");
        names.add("Garnet Gateway");
        names.add("Zinc Zenith");
        names.add("Agate Abode");
        names.add("Bronze Bastion");
        names.add("Mica Monument");
        names.add("Quartz Quiver");
        names.add("Cobalt Castle");
        names.add("Flint Foothold");
        names.add("Aluminum Apex");
        names.add("Rhodium Refuge");
        names.add("Fluorite Fortress");
        names.add("Ironwood Outlook");
        names.add("Chromium Citadel");
        names.add("Emerald Estate");
        names.add("Copper Citadel");
        names.add("Titanium Turret");
        names.add("Pewter Promontory");
        names.add("Lead Ledge");
        names.add("Silver Spire");
        names.add("Nickel Nestle");
        names.add("Garnet Grotto");
        names.add("Zinc Zephyr");
        names.add("Agate Altar");
        names.add("Bronze Bulwark");
        names.add("Mica Mesa");
        names.add("Quartz Quiver");
        names.add("Cobalt Citadel");
        names.add("Flint Fortress");
        names.add("Aluminum Apex");
        names.add("Rhodium Retreat");
        names.add("Fluorite Fortress");
        names.add("Ironwood Outlook");
        names.add("Chromium Citadel");
        names.add("Emerald Estate");
        names.add("Copper Citadel");
        names.add("Titanium Turret");
        names.add("Pewter Promontory");
        names.add("Lead Ledge");
        names.add("Silver Spire");
        names.add("Nickel Nestle");
        names.add("Garnet Grotto");
        names.add("Zinc Zephyr");
        names.add("Agate Altar");
        // Add more tower names as desired, ensuring they are unique within this list

        return Collections.unmodifiableList(names);
    }

    public static synchronized String getRandomTowerName() {
        while (true) {
            int index = RANDOM_GENERATOR.nextInt(TOWER_NAMES.size());
            String candidateName = TOWER_NAMES.get(index);

            if (!USED_TOWER_NAMES.contains(candidateName)) {
                USED_TOWER_NAMES.add(candidateName);
                return candidateName;
            }
        }
    }
}